/**
 * 枚举类型
 */

export {}

// 编码中经常要使用一些数字来表示状态，传统的写法不易维护
// const post = {
//   status: 0 // 0 状态1，1状态2...
// }

// const PostStatus = {
//   Draft: 0,
//   UnPublish: 1,
//   Published: 2
// }

// 枚举实现
// 不指定值时会默认从0开始累加
// enum PostStatus {
//   Draft = 0,
//   UnPublish = 1,
//   Published = 2,
// }

// 指定第一个值后，会从第一个值开始累加
// enum PostStatus {
//   Draft = 6,
//   UnPublish, // 7
//   Published, // 8
// }

// 字符串枚举无法累加，需要手动赋值,一般不会用到
// enum PostStatus {
//   Draft = 'Draft',
//   UnPublish = 'UnPublish', // 7
//   Published = 'Published', // 8
// }

// enum PostStatus {
//   Draft,
//   UnPublish,
//   Published,
// }

// 普通枚举类型会入侵运行时的代码，会影响编译结果,编译为双向键值对对象
// var PostStatus;
// (function (PostStatus) {
//     PostStatus[PostStatus["Draft"] = 0] = "Draft";
//     PostStatus[PostStatus["UnPublish"] = 1] = "UnPublish";
//     PostStatus[PostStatus["Published"] = 2] = "Published";
// })(PostStatus || (PostStatus = {}));

// 当确认代码中不会用索引器方式访问枚举名称时，采用常量枚举可避免这种情况
const enum PostStatus {
  Draft,
  UnPublish,
  Published,
}

// 编译为
// var post = {
//   status: 2 /* Published */
// };

const post = {
  status: PostStatus.Published
}
